﻿using System;
using System.Collections.Generic;

namespace CSharp.Basic.Learn.发布订阅
{
    // 发布订阅
    // 事件源
    // 事件参数
    // Publisher 发布者  Subscriber 订阅者
    // refs: http://www.cnblogs.com/sheng-jie/p/6970091.html
    public class Default
    {

    }

    /// <summary>
    /// 鱼类型
    /// </summary>
    public enum FishType
    {
        草鱼,
        鲤鱼,
        虾米
    }

    /// <summary>
    /// 鱼竿 充当被观察者 被观察者负责维护一个列表存储观察者
    /// </summary>
    public class FishingBod : FishingTool
    {
        //readonly List<Person> list = null;

        //public FishingBod()
        //{
        //    list = new List<Person>();
        //}

        //#region methods

        ///// <summary>
        ///// 添加人作为观察者
        ///// </summary>
        ///// <param name="person">Person.</param>
        //public void Attach(Person person)
        //{
        //    list.Add(person);
        //}

        ///// <summary>
        ///// 移除观察者
        ///// </summary>
        ///// <param name="person">Person.</param>
        //public void Remove(Person person)
        //{
        //    list.RemoveAll(item => item.Id == person.Id);
        //}

        ///// <summary>
        ///// 通知鱼上钩了
        ///// </summary>
        //public void Notify(FishType type)
        //{
        //    list.ForEach(p =>
        //    {
        //        p.Handle(type);
        //    });
        //}
        //#endregion
    }

    /// <summary>
    /// 人 充当观察者  观察者负责提供一个方法用于接收被观察者推送的通知
    /// </summary>
    public class Person : ISubscriber
    {
        public string Id { get; set; }
        public string Name { get; set; }

        #region methods

        /// <summary>
        /// 被观察者负责调用
        /// </summary>
        public void Receive(object args)
        {
            Console.WriteLine($"{Name}: 一条" + args.ToString() + " 上钩！");
        }

        #endregion
    }
}
